The present disclosure relates generally to computing devices, and, in particular, to managing an inbound message queue in a computing device.
An asynchronous messaging system handles request messages that represent inbound work (requests) for a server complex that includes message consumers. Request messages are received onto queues and then dispatched to the message consumers. The request messages may require a response or may represent one-way notifications that do not require a response. Examples of one-way notifications may include, for example, a submission of data from a remote sensor that is to be checked/recorded.
Response time refers to the time taken to process the request message—i.e. how long has the request message had to wait on the request queue (and associated transmission queues in the messaging system) before it is delivered to the message consumer. The response time does not relate to the (optional) generation or receipt of a response message. The overall rate at which work is accepted into the server complex has to be managed, otherwise long response times may occur.
It is well known that the amount of work can be limited by limiting the length of the request queue. In operation, limiting the length of the request queue includes accepting and queuing messages until the queue reaches its length limit. After the limit has been reached, newer messages are rejected. Operating in this manner has the effect of honoring older messages, and synchronously rejecting newer ones, and thereby making accepted messages sacred. This avoids the possibility of accepted messages being preempted by newer messages. One of the characteristics of this model is that in order to be able to handle bursty traffic the queue needs a relatively long maximum length; the disadvantage of this is that a full queue (one that has reached its limit) consumes a significant amount of resources. For example, each message may occupy hundreds of MB of storage and there may be hundreds or even thousands on the queue. This is undesirable because it loads the messaging system, affecting its ability to browse (locate messages) and the time it will take to recover from a failure. It also means that there is a large backlog of messages that need to be processed before the system becomes responsive.
Of course, many other solutions exist in the art but each of them may have their own shortcomings.